package com.young.weixin.model.enums;

import com.young.weixin.model.message.*;

/**
 * 微信消息类型
 *
 * @author wangjiyu
 * @date 2021/10/5 17:15
 */
public enum EWxMessageTypeEnum {
    /**
     * 文本消息
     */
    TEXT("text", "文本消息", new WxTextMessage()),
    /**
     * 图片消息
     */
    IMAGE("image", "图片消息", new WxImageMessage()),
    /**
     * 语音消息
     */
    VOICE("voice", "语音消息", new WxVoiceMessage()),
    /**
     * 视频消息
     */
    VIDEO("video", "视频消息", new WxVideoMessage()),
    /**
     * 小视频消息
     */
    SHORT_VIDEO("shortvideo", "小视频消息", new WxShortVideoMessage()),
    /**
     * 地理位置消息
     */
    LOCATION("location", "地理位置消息", new WxLocationMessage()),
    /**
     * 链接消息
     */
    LINK("link", "链接消息", new WxLinkMessage()),
    /**
     * 事件消息
     */
    EVENT("event", "事件消息", new WxEventMessage())
    ;

    /**
     * 类型
     */
    public final String type;
    /**
     * 说明
     */
    public final String text;
    /**
     * 工厂bean
     */
    public final IWxMessageFactoryBean wxMessageFactory;

    /**
     * 匹配枚举
     * @param type
     * @return
     */
    public static EWxMessageTypeEnum of(String type) {
        for (EWxMessageTypeEnum e : EWxMessageTypeEnum.values()) {
            if (e.eq(type)) {
                return e;
            }
        }
        return null;
    }

    /**
     * 判断相等
     *
     * @param type
     * @return true表示相等
     */
    public boolean eq(String type) {
        return this.type.equals(type);
    }

    /**
     * 判断不相等
     *
     * @param type
     * @return true表示不相等
     */
    public boolean notEq(String type) {
        return !this.eq(type);
    }

    EWxMessageTypeEnum(String type, String text, IWxMessageFactoryBean wxMessageFactory) {
        this.type = type;
        this.text = text;
        this.wxMessageFactory = wxMessageFactory;
    }
}
